package com.stefanini.pe.bbva.bp.in.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.model.SelectItem;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import org.primefaces.event.ToggleEvent;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import com.pe.bbva.utils.Constantes;
import com.stefanini.pe.bbva.bp.in.bo.iface.CuestionarioBOIface;
import com.stefanini.pe.bbva.bp.in.bo.iface.ParametrosBOIface;
import com.stefanini.pe.bbva.bp.in.model.AdministrarCuestionarioModel;
import com.stefanini.pe.bbva.bp.in.model.LoginModel;
import com.stefanini.pe.bbva.bp.in.security.AuthorizationService;
import com.stefanini.pe.bbva.bp.in.to.Cliente;
import com.stefanini.pe.bbva.bp.in.to.NoCliente;
import com.stefanini.pe.bbva.bp.in.to.UsuarioSesion;

import com.stefanini.pe.bbva.bp.in.utils.SpringApplicationContext;
import com.stefanini.pe.bbva.bp.in.utils.Util;

@Controller(value="administrarCuestionario")
@RequestScoped
public class AdministrarCuestionario extends GenericoController  {
	@Autowired
	private CuestionarioBOIface cuestionarioBOIface;
	@Autowired
	private ParametrosBOIface parametrosBOIface;
	@Autowired
	private AdministrarCuestionarioModel administrarCuestionarioModel;

	private LoginModel loginModel;
	
	private Map parametrosReporte;
	private String tipoRespuesta;
	private String nroEscenarios;
	private String nombre;
	private String descripcion;
	private String idSeccionHidden;
	
	private HashMap idSeccion;
	private String usuarioModificacion;
	private String fechaModificacion;
	private String idPreguntaHidden;
	private boolean visibleEscenario;
	private String mensajeBusqueda;

	private boolean mostrarModificacion;
	private String idItemEliminar;
	
	Logger logger = Logger.getLogger(this.getClass());
	
	public void onPageLoad() {
		try {
			AuthorizationService auth = (AuthorizationService)SpringApplicationContext.getBean("authorizationService");
			if (auth.isSessionUserAndContextValide() && !FacesContext.getCurrentInstance().isPostback()) {
				System.out.println("AdministrarCuestionario... is not Postback");
				
				usuarioModificacion = "";
				fechaModificacion = "";
				visibleEscenario = true;
				
				LoginController loginContr = (LoginController)getHttpSession().getAttribute("loginController");
				loginModel = loginContr.getLoginModel();
				
				this.getAdministrarCuestionarioModel().setListaPreguntas(new ArrayList());
				this.getAdministrarCuestionarioModel().setIdSeccion(new HashMap());
				
				FacesContext ctx = FacesContext.getCurrentInstance();
				((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioPregunta",new ArrayList());
				((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioPregunta_param", this.getParametrosReporte());
				
				this.getAdministrarCuestionarioModel().setParam(null);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void adminCuestionario(){
		  Util.redirect("/pages/gestion/AdministrarCuestionario.xhtml");
	}
	
    public Map getParametrosReporte() {
		parametrosReporte=new HashMap();
		FacesContext ctx = FacesContext.getCurrentInstance();
		
		UsuarioSesion usuarioSesion =(UsuarioSesion)((HttpSession) ctx.getExternalContext().getSession(false)).
			        	getAttribute(Constantes.USUARIO_SESSION);
		Calendar c=Calendar.getInstance();
		
		parametrosReporte.put("p_fecha",new SimpleDateFormat("dd/MM/yyyy").format(new Date()));
		parametrosReporte.put("p_fechaRebalanceo",new SimpleDateFormat("dd/MM/yyyy").format(new Date()));
		
		if(usuarioSesion!=null){
			parametrosReporte.put("p_fechaInformacion",Util.formatDate(usuarioSesion.getFechaInformacion()));
			parametrosReporte.put("p_nombEjecutivo",usuarioSesion.retornaNombreCompleto());
			parametrosReporte.put("p_mailEjecutivo",usuarioSesion.getEmail());
			parametrosReporte.put("p_telfEjecutivo",usuarioSesion.getTelefono());
		}
		
		if(((HttpSession)ctx.getExternalContext().getSession(true)).getAttribute(Constantes.OBJETO_CLIENTE_SESSION)!=null) {
			Cliente oCliente= (Cliente)((HttpSession)ctx.getExternalContext().getSession(true)).getAttribute(Constantes.OBJETO_CLIENTE_SESSION);
			parametrosReporte.put("p_nombCliente",oCliente.getNomtarjeta()==null?oCliente.retornaNombreCompleto():oCliente.getNomtarjeta());
			parametrosReporte.put("p_nombPerfil",oCliente.getNombreperfil());
			parametrosReporte.put("p_tipodoc",oCliente.getTipdoc());
			parametrosReporte.put("p_nrodoc",oCliente.getNrodoc());
		}
		
		if(((HttpSession)ctx.getExternalContext().getSession(true)).getAttribute(Constantes.OBJETO_NO_CLIENTE_SESSION)!=null) {
		   
			NoCliente noCliente= (NoCliente)((HttpSession)ctx.getExternalContext().getSession(true)).getAttribute(Constantes.OBJETO_NO_CLIENTE_SESSION);
			parametrosReporte.put("p_nombNoCliente",noCliente.getNomtarjeta()==null?noCliente.retornaNombreCompleto():noCliente.getNomtarjeta());
			parametrosReporte.put("p_nombPerfilNoCliente",noCliente.getNombreperfil());
			parametrosReporte.put("p_tipoDocNoCliente",noCliente.getDestipdoc());
			parametrosReporte.put("p_nroDocNoCliente",noCliente.getNrodoc());
		}
		 
		parametrosReporte.put("REPORT_LOCALE",new java.util.Locale("en") );
		parametrosReporte.put("image_path", (String)((ServletContext)ctx.getExternalContext().getContext()).getRealPath(Constantes.IMAGE_BBVA_REPORT));
		
		return parametrosReporte;
	}
   
	public void consultaPreguntas(){
		try{
			HashMap  idSeccion=administrarCuestionarioModel.getIdSeccion();
			FacesContext ctx = FacesContext.getCurrentInstance();
			
			if(!idSeccion.get("value").toString().equals("")){
				this.getAdministrarCuestionarioModel().setListaPreguntas(cuestionarioBOIface.consultaCuestionarioPregunta(this.getAdministrarCuestionarioModel().getIdSeccion().get("value").toString()));
				((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioPregunta", this.getAdministrarCuestionarioModel().getListaPreguntas());
				Map parametros = this.getParametrosReporte();
				parametros.put("p_seccion",idSeccion.get("label"));
					
				((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioPregunta_param", parametros);
			}else{
				this.getAdministrarCuestionarioModel().setListaPreguntas(new ArrayList());
				((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioPregunta", new ArrayList());
				Map parametros = this.getParametrosReporte();
				parametros.put("p_seccion", "");
				this.setMensajeBusqueda("Seleccione un valor del combo Seccion.");	
				((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioPregunta_param", parametros);
			}			
		}catch(Exception ex){
			ex.printStackTrace();
			logger.error("consultaPreguntas():"+ex.getMessage());
		}
	}
	
	public void consultaPreguntasController(){
		try{
			idSeccion=administrarCuestionarioModel.getIdSeccion();
			FacesContext ctx = FacesContext.getCurrentInstance();
			
			if (idSeccion.get("value")!=null && !idSeccion.get("value").toString().equals("")) {
				if(!idSeccion.get("value").toString().equals("")){
					this.setMensajeBusqueda("");
					this.getAdministrarCuestionarioModel().setIdSeccion(this.getIdSeccion());
					this.getAdministrarCuestionarioModel().setListaPreguntas(cuestionarioBOIface.consultaCuestionarioPregunta(idSeccion.get("value").toString()));
				    ((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioPregunta", this.getAdministrarCuestionarioModel().getListaPreguntas());
					Map parametros = this.getParametrosReporte();
					parametros.put("p_seccion",idSeccion.get("label"));
					((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioPregunta_param", parametros);
				}else{
					this.getAdministrarCuestionarioModel().setListaPreguntas(new ArrayList());
					((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioPregunta", new ArrayList());
					Map parametros = this.getParametrosReporte();
					parametros.put("p_seccion", "");
					this.setMensajeBusqueda("Seleccione un valor del combo Seccion.");	
					((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioPregunta_param", parametros);
				}
			}else{
				this.getAdministrarCuestionarioModel().setListaPreguntas(new ArrayList());
				((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioPregunta", new ArrayList());
				Map parametros = this.getParametrosReporte();
				parametros.put("p_seccion", "");
				this.setMensajeBusqueda("Seleccione un valor del combo Seccion.");
				((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioPregunta_param", parametros);
			}			
		}catch(Exception ex){
			ex.printStackTrace();
			logger.error("consultaPreguntasController():"+ex.getMessage());
		}		
	}
	
	public void cargarValoresEdicion(Object ob){
		HashMap map = (HashMap)ob;
		this.setMostrarModificacion(true);
		this.setTipoRespuesta((String)map.get("IDTIPORESPUESTA"));
		this.setNombre((String)map.get("DESCRIPCIONPREGUNTA"));
		this.setDescripcion((String)map.get("DESCRIPCIONADICIONAL"));
		this.setNroEscenarios((String)map.get("NROESCENARIOS"));
		this.setUsuarioModificacion((String)map.get("CODREGISTROMODIFICACION"));
		this.setFechaModificacion((String)map.get("FECHAMODIFICACION"));
		this.setIdPreguntaHidden((String)map.get("IDPREGUNTA"));
		this.setIdSeccionHidden(this.getAdministrarCuestionarioModel().getIdSeccion().get("value").toString());
		cargaListTipoRepuestas(this.getAdministrarCuestionarioModel().getIdSeccion().get("value").toString());
		
		
		if(this.getTipoRespuesta().equals("3")){
			this.setVisibleEscenario(true);
		}else{
			this.setVisibleEscenario(false);
		}
		RequestContext context = RequestContext.getCurrentInstance(); 
		context.update("formularioPanel:new_messages");
		
	}
	
	public void evaluaTipoRespuesta(AjaxBehaviorEvent even){
		String tipRespuesta= (String) even.getComponent().getAttributes().get("value");
		if(tipRespuesta.equals("3")){
			this.setVisibleEscenario(true);
		}else{
			this.setVisibleEscenario(false);
		}
	}
	
	public void cargaListTipoRepuestas(String idSeccion){
		try{
			List lTipoRespuestas=parametrosBOIface.listaTipoRespuestas(idSeccion);
			this.getAdministrarCuestionarioModel().setListTipoRespuestas(new ArrayList());
			this.getAdministrarCuestionarioModel().getListTipoRespuestas().add(new SelectItem("", "-- Seleccione --"));
			if(lTipoRespuestas!=null){
				for (Iterator iter = lTipoRespuestas.iterator(); iter.hasNext();) {
					HashMap element = (HashMap) iter.next();
					this.getAdministrarCuestionarioModel().getListTipoRespuestas().add(new SelectItem(element.get("value").toString(),element.get("label").toString()));
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public void nuevaPregunta(){
		if(this.getAdministrarCuestionarioModel().getIdSeccion()!=null){
			if(this.getAdministrarCuestionarioModel().getIdSeccion().get("value").toString().trim()!=""){
				this.setMostrarModificacion(false);
				this.setTipoRespuesta("");
				this.setNombre("");
				this.setDescripcion("");
				this.setNroEscenarios("");
				this.setUsuarioModificacion("");
				this.setFechaModificacion("");
				this.setIdSeccionHidden(this.getAdministrarCuestionarioModel().getIdSeccion().get("value").toString());
				this.setIdPreguntaHidden("");
				cargaListTipoRepuestas(this.getAdministrarCuestionarioModel().getIdSeccion().get("value").toString());
				if(this.getTipoRespuesta().equals("3")){
					this.setVisibleEscenario(true);
				} else{
					this.setVisibleEscenario(false);
				}	
			}else{
				this.setMensajeBusqueda("Seleccione un valor del combo Seccion.");
			}	
		}else{
			this.setMensajeBusqueda("Seleccione un valor del combo Seccion.");
		}				
	}
	
	
	public void guardarCuestionario(ActionEvent event){
				
		String msgPopupWarn ="";
		String msgPopupError ="";
		String msgMainWarn = "";
		
		try {
			RequestContext context = RequestContext.getCurrentInstance();	
			UsuarioSesion usuarioSesion=loginModel.getUsuarioSesion();
			 
	     if(this.getNombre().trim().equals("")) {	
	    	 msgPopupWarn ="El campo Nombre es Obligatorio"; 
	     }else if(this.getDescripcion().trim().equals("")) {
	    	 msgPopupWarn ="El campo Descripci\u00f3n es Obligatorio"; 
	     }else if(this.getTipoRespuesta().trim().equals("")){
	    	 msgPopupWarn ="El campo Tipo de Respuesta es Obligatorio"; 
	     }else {
	    	 
			HashMap map= new HashMap();
			map.put("in_descripcionpregunta", this.getNombre());
			map.put("in_descripcionadicional", this.getDescripcion());
			map.put("in_idseccion", this.getIdSeccionHidden());
			map.put("in_idtiporespuesta", this.getTipoRespuesta());
			map.put("in_nroescenarios", this.getNroEscenarios()==null?"":this.getNroEscenarios());
			if(this.getIdPreguntaHidden().equals("")){
				map.put("in_codregistrocreacion", usuarioSesion.getCodigoUsuario());
				map.put("in_terminalcreacion", Util.getTerminal());
				cuestionarioBOIface.grabarCuestionario(map);
				
			}else{
				map.put("in_idpregunta", this.getIdPreguntaHidden());
				map.put("in_codregistromodificacion", usuarioSesion.getCodigoUsuario());
				map.put("in_terminalmodificacion", Util.getTerminal());
				cuestionarioBOIface.actualizarCuestionario(map);
			}
			
			consultaPreguntas();
		
		  }
		
		}catch(Exception e) {
			e.printStackTrace();
		}
		
		String[] idsMain={"formPrincipal:messages","formPrincipal:panelPreguntas"};
		String[] idsPopup={"formularioPanel:new_messages"};
		String argClosePopup="bandGrabarPreg";
		messageSaveToPopupOrMain(msgMainWarn, msgPopupWarn, msgPopupError, idsMain, idsPopup, argClosePopup, true);
	}
	
	public void eliminarPregunta(Object ob){
		HashMap map = (HashMap)ob;
		this.setIdItemEliminar((String)map.get("IDPREGUNTA"));
	}
	
	public void eliminar(){
		cuestionarioBOIface.eliminarCuestionario(this.getIdItemEliminar());
		consultaPreguntas();
	}
	
	public void AdministrarAlternativas(){
		  Util.redirect("/pages/gestion/CuestionarioAlternativa.xhtml");
	}
	
	public void accionSubir(Object ob){
		HashMap row = (HashMap)ob;
		HashMap map=new HashMap();
		
		map.put("in_idseccion",this.getAdministrarCuestionarioModel().getIdSeccion().get("value").toString());
		map.put("in_idpregunta", row.get("IDPREGUNTA"));
		map.put("in_accionsubir", "S");
		cuestionarioBOIface.ordenarCuestionario(map);
		consultaPreguntas();
	}
	
	public void accionBajar(Object ob){
		HashMap row = (HashMap)ob;
		HashMap map=new HashMap();
		this.setIdSeccion(this.getAdministrarCuestionarioModel().getIdSeccion());
		map.put("in_idseccion",this.getAdministrarCuestionarioModel().getIdSeccion().get("value").toString());
		map.put("in_idpregunta", row.get("IDPREGUNTA"));
		map.put("in_accionsubir", "N");
		cuestionarioBOIface.ordenarCuestionario(map);
		consultaPreguntas();
	}
	
	public AdministrarCuestionarioModel getAdministrarCuestionarioModel() {
		return administrarCuestionarioModel;
	}
	public void setAdministrarCuestionarioModel(
			AdministrarCuestionarioModel administrarCuestionarioModel) {
		this.administrarCuestionarioModel = administrarCuestionarioModel;
	}
	public String getTipoRespuesta() {
		return tipoRespuesta;
	}
	public void setTipoRespuesta(String tipoRespuesta) {
		this.tipoRespuesta = tipoRespuesta;
	}
	public String getNroEscenarios() {
		return nroEscenarios;
	}
	public void setNroEscenarios(String nroEscenarios) {
		this.nroEscenarios = nroEscenarios;
	}
	public String getDescripcion() {
		return descripcion;
	}
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getIdSeccionHidden() {
		return idSeccionHidden;
	}
	public void setIdSeccionHidden(String idSeccionHidden) {
		this.idSeccionHidden = idSeccionHidden;
	}
	
	
	public String getFechaModificacion() {
		return fechaModificacion;
	}
	public void setFechaModificacion(String fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}
	public String getIdPreguntaHidden() {
		return idPreguntaHidden;
	}
	public void setIdPreguntaHidden(String idPreguntaHidden) {
		this.idPreguntaHidden = idPreguntaHidden;
	}
	
	public void setIdSeccion(HashMap idSeccion){
		this.idSeccion=idSeccion;		
	}
	public HashMap getIdSeccion(){
		return idSeccion;
	}

	public boolean isVisibleEscenario() {
		return visibleEscenario;
	}
	public void setVisibleEscenario(boolean visibleEscenario) {
		this.visibleEscenario = visibleEscenario;
	}
	public String getUsuarioModificacion() {
		return usuarioModificacion;
	}
	public void setUsuarioModificacion(String usuarioModificacion) {
		this.usuarioModificacion = usuarioModificacion;
	}
	
	public String getMensajeBusqueda() {
		return mensajeBusqueda;
	}
	public void setMensajeBusqueda(String mensajeBusqueda) {
		this.mensajeBusqueda = mensajeBusqueda;
	}
	public boolean isMostrarModificacion() {
		return mostrarModificacion;
	}
	public void setMostrarModificacion(boolean mostrarModificacion) {
		this.mostrarModificacion = mostrarModificacion;
	}
	public String getIdItemEliminar() {
		return idItemEliminar;
	}
	public void setIdItemEliminar(String idItemEliminar) {
		this.idItemEliminar = idItemEliminar;
	}
	
	public void handleToggle(ToggleEvent event) {  
          
    }
}
